﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsEnfoqueDeMercado_CRN:clsEstado,IControlEstados
    {
        public static object CopiaDeEnfoque { get; set; }

        #region Propiedades
        public clsInmueble_CRN Inmueble { get; set; }
        public double FactorDeAjuste { get; set; }
        public string JustificacionFactor { get; set; }
        public double ValorConcluido
        {
            get
            {
                switch (this.ValorSeleccionado)
                {
                    case 1: 
                        return this.ValorDeVentasComparativoDeMercado;
                    case 2:
                        return this.Inmueble.Terreno.AnalisisFisico.ResultadoPorFactorAjuste; 
                    case 3:
                        return this.Inmueble.Terreno.AnalisisCapRentas.ValorDeCapitalizacion;
                    case 4:
                        return 0;
                    default:
                        return this.ValorDeVentasComparativoDeMercado;
                }
            }
        }
        public int ValorSeleccionado { get; set; }
        public string ResultadoEnletras
        {
            get
            {
                clsNumerosALetras convertir = new clsNumerosALetras();
                convertir.LetraCapital = true;
                convertir.SeparadorDecimalSalida = " pesos";
                return convertir.ToCustomCardinal(this.ValorConcluido);
            }
        }
        
        #region Propiedades Referentes al enfoque de mercado: terreno
        //public string AdvFReTerreno
        //{
        //    get
        //    {
        //        IEnumerable<clsEnfoqueMercadoTerreno_CRN> enfoques = from enfoque in this.ComparacionesEnfoqueMTerreno
        //                                                             where ((enfoque.FactorDeReferencia > 0) && (enfoque.FactorDeReferencia < 0.7 || enfoque.FactorDeReferencia > 1.3))
        //                                                             select enfoque;
        //            string strAdvertencia = "Fre de:";
        //            if (enfoques.Count() > 0)
        //            {
        //                foreach (clsEnfoqueMercadoTerreno_CRN objEnfoque in enfoques)
        //                {
        //                    strAdvertencia += objEnfoque.Etiqueta + ", ";
        //                }
        //                strAdvertencia += "estan fuera del rango";
        //                return strAdvertencia;
        //            }
        //            else
        //                return string.Empty;
        //    }
        //}
        public string AdvFactoresTerreno
        {
            get
            {
                string strAdvertencia;
                IEnumerable<clsEnfoqueMercadoTerreno_CRN> enfoques = from enfoque in this.ComparacionesEnfoqueMTerreno
                                                                     where ((enfoque.FactorZona < 0.8 || enfoque.FactorZona > 1.2) || (enfoque.FactorUbicacion < 0.8 || enfoque.FactorUbicacion > 1.2) || (enfoque.FactorOtro < 0.8 || enfoque.FactorOtro > 1.2) || ((enfoque.FactorDeReferencia > 0) && (enfoque.FactorDeReferencia < 0.7 || enfoque.FactorDeReferencia > 1.3)))
                                                                     select enfoque;
                
                if (enfoques.Count() > 0)
                {
                    strAdvertencia = "Factores con divergencia de rangos:";
                    foreach (clsEnfoqueMercadoTerreno_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += "\n" + objEnfoque.Etiqueta + ": ";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorZona))
                            strAdvertencia += "Fzo,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorUbicacion))
                            strAdvertencia += " Fub,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorOtro))
                            strAdvertencia += " Fot,";
                        if ((objEnfoque.FactorDeReferencia > 0) && (objEnfoque.FactorDeReferencia < 0.7 || objEnfoque.FactorDeReferencia > 1.3))
                            strAdvertencia += " Fre.";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public string AdvSupTerrenoT
        {
            get
            {
                string strAdvertencia = string.Empty;
                IEnumerable<clsEnfoqueMercadoTerreno_CRN> enfoques = from enfoque in this.ComparacionesEnfoqueMTerreno
                                                                     where ((enfoque.SuperficieDeTerreno > 0) && (enfoque.SuperficieDeTerreno < this.ValorDeTerrenoPermitidoDesde || enfoque.SuperficieDeTerreno > this.ValorDeTerrenoPermitidoHasta))
                                                                     select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia += "Superficies de terreno con divergencia de rangos: \n";
                    foreach (clsEnfoqueMercadoTerreno_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += objEnfoque.Etiqueta +".";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public double ValorDeTerrenoPermitidoDesde
        {
            get
            {
                    return 0.50 * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieDeTerreno);
            }
        }
        public double ValorDeTerrenoPermitidoHasta
        {
            get
            {
                    return 2 * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieDeTerreno);
            }
        }
        public double ValorHomologadoDeTerrenoEncontrado
        {
            get
            {
                if ((this.ComparacionesEnfoqueMTerreno != null) && (this.ComparacionesEnfoqueMTerreno.Count > 0))
                {
                    double suma = 0;
                    foreach (clsEnfoqueMercadoTerreno_CRN objEnfoque in this.ComparacionesEnfoqueMTerreno)
                    {
                        suma += objEnfoque.ValorHomologadoM2;
                    }
                    return suma / this.ComparacionesEnfoqueMTerreno.Count;
                }
                else
                    return 0;
            }
        }
        public double ValorHomologadoDeTerrenoAplicable
        {
            get
            {
                switch (this.RedondeoTerreno)
                {
                    case -1:
                        return this.Redondear(this.ValorHomologadoDeTerrenoEncontrado, 10.0);
                    case -2:
                        return this.Redondear(this.ValorHomologadoDeTerrenoEncontrado, 100.0);
                    case -3:
                        return this.Redondear(this.ValorHomologadoDeTerrenoEncontrado, 1000.0);
                    case -4:
                        return this.Redondear(this.ValorHomologadoDeTerrenoEncontrado, 10000.0);
                    case -5:
                        return this.Redondear(this.ValorHomologadoDeTerrenoEncontrado, 100000.0);
                    default:
                        return Math.Round(this.ValorHomologadoDeTerrenoEncontrado, this.RedondeoTerreno, MidpointRounding.AwayFromZero);
                }
            }
        }
        public double ValorComparativoDeMercado
        {
            get
            {
                return this.ValorHomologadoDeTerrenoAplicable * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieDeTerreno);
            }
        }
        public int RedondeoTerreno { get; set; }
        public BindingList<clsEnfoqueMercadoTerreno_CRN> ComparacionesEnfoqueMTerreno { get; set; }
        #endregion

        #region Propiedades Referentes al enfoque de mercado: venta
        public string AdvFactoresVentas
        {
            get
            {
                string strAdvertencia;
                IEnumerable<clsEnfoqueMercadoVenta_CRN> enfoques = from enfoque in this.ComparacionesEnfoqueMVenta
                                                                   where ((enfoque.FactorZona < 0.8 || enfoque.FactorZona > 1.2) || (enfoque.FactorUbicacion < 0.8 || enfoque.FactorUbicacion > 1.2) || (enfoque.FactorOtro < 0.8 || enfoque.FactorOtro > 1.2) || (enfoque.FactorConservacion < 0.8 || enfoque.FactorConservacion > 1.2) || (enfoque.FactorCalidad < 0.8 || enfoque.FactorCalidad > 1.2) || ((enfoque.FactorDeReferencia > 0) && (enfoque.FactorDeReferencia < 0.7 || enfoque.FactorDeReferencia > 1.3)))
                                                                   select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia = "Factores con divergencia de rangos:";
                    foreach (clsEnfoqueMercadoVenta_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += "\n" + objEnfoque.Etiqueta + ": ";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorZona))
                            strAdvertencia += "Fzo,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorUbicacion))
                            strAdvertencia += " Fub,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorConservacion))
                            strAdvertencia += " Fcon,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorCalidad))
                            strAdvertencia += " Fca,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorOtro))
                            strAdvertencia += " Fot,";
                        if ((objEnfoque.FactorDeReferencia > 0) && (objEnfoque.FactorDeReferencia < 0.7 || objEnfoque.FactorDeReferencia > 1.3))
                            strAdvertencia += " Fre,";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public string AdvSupTerrenoV
        {
            get
            {
                string strAdvertencia = string.Empty;
                IEnumerable<clsEnfoqueMercadoVenta_CRN> enfoques = from enfoque in this.ComparacionesEnfoqueMVenta
                                                                     where ((enfoque.SuperficieDeTerreno > 0) && (enfoque.SuperficieDeTerreno < this.ValorDeTerrenoPermitidoDesde || enfoque.SuperficieDeTerreno > this.ValorDeTerrenoPermitidoHasta))
                                                                     select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia += "Superficies de terreno con divergencia de rangos: \n";
                    foreach (clsEnfoqueMercadoVenta_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += objEnfoque.Etiqueta + ".";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public string AdvSupConstV
        {
            get
            {
                string strAdvertencia = string.Empty;
                IEnumerable<clsEnfoqueMercadoVenta_CRN> enfoques = from enfoque in this.ComparacionesEnfoqueMVenta
                                                                   where ((enfoque.SuperficieConstruccion > 0) && (enfoque.SuperficieConstruccion < this.ValorDeConstruccionPermitidoDesde || enfoque.SuperficieConstruccion > this.ValorDeConstruccionPermitidoHasta))
                                                                   select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia += "Superficies de Construccion con divergencia de rangos: \n";
                    foreach (clsEnfoqueMercadoVenta_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += objEnfoque.Etiqueta + ".";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public double ValorDeConstruccionPermitidoDesde
        {
            get
            {
                return 0.70 * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieTotalDeConstruccion);
            }
        }
        public double ValorDeConstruccionPermitidoHasta
        {
            get
            {
                return 1.75 * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieTotalDeConstruccion);
            }
        }
        public double ValorHomologadoDeVentasEncontrado
        {
            get
            {
                if ((this.ComparacionesEnfoqueMVenta != null) && (this.ComparacionesEnfoqueMVenta.Count > 0))
                {
                    double suma = 0;
                    foreach (clsEnfoqueMercadoVenta_CRN objEnfoque in this.ComparacionesEnfoqueMVenta)
                    {
                        suma += objEnfoque.VentaM2Homologado;
                    }
                    return suma / this.ComparacionesEnfoqueMVenta.Count;
                }
                else
                    return 0;
            }
        }
        public double ValorHomologadoDeVentasAplicable
        {
            get
            {
                switch (this.RedondeoVentas)
                {
                    case -1:
                        return this.Redondear(this.ValorHomologadoDeVentasEncontrado, 10.0);
                    case -2:
                        return this.Redondear(this.ValorHomologadoDeVentasEncontrado, 100.0);
                    case -3:
                        return this.Redondear(this.ValorHomologadoDeVentasEncontrado, 1000.0);
                    case -4:
                        return this.Redondear(this.ValorHomologadoDeVentasEncontrado, 10000.0);
                    case -5:
                        return this.Redondear(this.ValorHomologadoDeVentasEncontrado, 100000.0);
                    default:
                        return Math.Round(this.ValorHomologadoDeVentasEncontrado, this.RedondeoVentas, MidpointRounding.AwayFromZero);
                }
            }
        }
        public double ValorHomologadoPorFactorA { get { return this.ValorHomologadoDeVentasAplicable * this.FactorDeAjuste; } }
        public double ValorDeVentasComparativoDeMercado
        {
            get
            {
                return this.ValorHomologadoPorFactorA * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieTotalDeConstruccion);
            }
        }
        public int RedondeoVentas { get; set; }
        public BindingList<clsEnfoqueMercadoVenta_CRN> ComparacionesEnfoqueMVenta { get; set; }
        #endregion

        #region Propiedades Referente al enfoque de mercado: renta
        public string AdvFactoresRenta
        {
            get
            {
                string strAdvertencia;
                IEnumerable<clsEnfoqueMercadoRenta_CRN> enfoques = from enfoque in this.ComparacionEnfoqueMRenta
                                                                   where ((enfoque.FactorZona < 0.8 || enfoque.FactorZona > 1.2) || (enfoque.FactorUbicacion < 0.8 || enfoque.FactorUbicacion > 1.2) || (enfoque.FactorOtro < 0.8 || enfoque.FactorOtro > 1.2) || (enfoque.FactorConservacion < 0.8 || enfoque.FactorConservacion > 1.2) || (enfoque.FactorCalidad < 0.8 || enfoque.FactorCalidad > 1.2) || ((enfoque.FactorDeReferencia > 0) && (enfoque.FactorDeReferencia < 0.7 || enfoque.FactorDeReferencia > 1.3)))
                                                                   select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia = "Factores con divergencia de rangos:";
                    foreach (clsEnfoqueMercadoRenta_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += "\n" + objEnfoque.Etiqueta + ": ";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorZona))
                            strAdvertencia += "Fzo,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorUbicacion))
                            strAdvertencia += " Fub,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorConservacion))
                            strAdvertencia += " Fcon,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorCalidad))
                            strAdvertencia += " Fca,";
                        if (!objEnfoque.FactorValido(objEnfoque.FactorOtro))
                            strAdvertencia += " Fot,";
                        if ((objEnfoque.FactorDeReferencia > 0) && (objEnfoque.FactorDeReferencia < 0.7 || objEnfoque.FactorDeReferencia > 1.3))
                            strAdvertencia += " Fre,";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public string AdvSupTerrenoR
        {
            get
            {
                string strAdvertencia = string.Empty;
                IEnumerable<clsEnfoqueMercadoRenta_CRN> enfoques = from enfoque in this.ComparacionEnfoqueMRenta
                                                                   where ((enfoque.SuperficieDeTerreno > 0) && (enfoque.SuperficieDeTerreno < this.ValorDeTerrenoPermitidoDesde || enfoque.SuperficieDeTerreno > this.ValorDeTerrenoPermitidoHasta))
                                                                   select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia += "Superficies de terreno con divergencia de rangos: \n";
                    foreach (clsEnfoqueMercadoRenta_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += objEnfoque.Etiqueta + ".";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }
        public string AdvSupConstR
        {
            get
            {
                string strAdvertencia = string.Empty;
                IEnumerable<clsEnfoqueMercadoRenta_CRN> enfoques = from enfoque in this.ComparacionEnfoqueMRenta
                                                                   where ((enfoque.SuperficieConstruccion > 0) && (enfoque.SuperficieConstruccion < this.ValorDeConstruccionPermitidoDesde || enfoque.SuperficieConstruccion > this.ValorDeConstruccionPermitidoHasta))
                                                                   select enfoque;
                if (enfoques.Count() > 0)
                {
                    strAdvertencia += "Superficies de Construccion con divergencia de rangos: \n";
                    foreach (clsEnfoqueMercadoRenta_CRN objEnfoque in enfoques)
                    {
                        strAdvertencia += objEnfoque.Etiqueta + ".";
                    }
                    return strAdvertencia;
                }
                else
                    return string.Empty;
            }
        }

        public double ValorHomologadoDeRentasEncontrado
        { 
            get
            {
                if ((this.ComparacionEnfoqueMRenta != null) && (this.ComparacionEnfoqueMRenta.Count > 0))
                {
                    double suma = 0;
                    foreach (clsEnfoqueMercadoRenta_CRN objEnfoque in this.ComparacionEnfoqueMRenta)
                    {
                        suma += objEnfoque.RentaPorM2Homologado;
                    }
                    return suma / this.ComparacionEnfoqueMRenta.Count;
                }
                else
                    return 0;
            } }
        public double ValorHomologadoDeRentasAplicable
        {
            get
            {
                switch (this.RedondeoRenta)
                {
                    case -1:
                        return this.Redondear(this.ValorHomologadoDeRentasEncontrado, 10.0);
                    case -2:
                        return this.Redondear(this.ValorHomologadoDeRentasEncontrado, 100.0);
                    case -3:
                        return this.Redondear(this.ValorHomologadoDeRentasEncontrado, 1000.0);
                    case -4:
                        return this.Redondear(this.ValorHomologadoDeRentasEncontrado, 10000.0);
                    case -5:
                        return this.Redondear(this.ValorHomologadoDeRentasEncontrado, 100000.0);
                    default:
                        return Math.Round(this.ValorHomologadoDeRentasEncontrado, this.RedondeoRenta, MidpointRounding.AwayFromZero);
                }
            }
        }
        public double ValorDeRentasComparativoDeMercado
        {
            get
            {
                return this.ValorHomologadoDeRentasAplicable * Convert.ToDouble(this.Inmueble.Terreno.Construccion.SuperficieTotalDeConstruccion);
            }
        }
        public int RedondeoRenta { get; set; }
        public BindingList<clsEnfoqueMercadoRenta_CRN> ComparacionEnfoqueMRenta { get; set; }
        #endregion

        #endregion

        #region Constructor
        public clsEnfoqueDeMercado_CRN(clsInmueble_CRN objInmueble):base()
        {
            this.Inmueble = objInmueble;
            this.RedondeoRenta = 0;
            this.RedondeoTerreno = 0;
            this.RedondeoVentas = 0;
            this.FactorDeAjuste = 1;
            this.JustificacionFactor = string.Empty;
            this.ComparacionesEnfoqueMTerreno = new BindingList<clsEnfoqueMercadoTerreno_CRN>();
            this.ComparacionesEnfoqueMVenta = new BindingList<clsEnfoqueMercadoVenta_CRN>();
            this.ComparacionEnfoqueMRenta = new BindingList<clsEnfoqueMercadoRenta_CRN>();
        }
        #endregion

        #region Métodos

        public void ConvertirANuevo()
        {
            this.EsNuevo = true;
            foreach (clsEnfoqueMercadoTerreno_CRN enfoqueTerreno in this.ComparacionesEnfoqueMTerreno)
            {
                enfoqueTerreno.EsNuevo = true;
            }

            foreach (clsEnfoqueMercadoVenta_CRN enfoqueMercado in this.ComparacionesEnfoqueMVenta)
            {
                enfoqueMercado.EsNuevo = true;
            }

            foreach (clsEnfoqueMercadoRenta_CRN enfoqueRenta in this.ComparacionEnfoqueMRenta)
            {
                enfoqueRenta.EsNuevo = true;
            }
        }

        public bool Guardar()
        {
            if (DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaEnfoque();
                else
                {
                    if (this.EsModificado)
                        return ModificaEnfoque();
                    else
                        return EliminaEnfoque();
                }
             //   return false;
            }
            return false;
        }

        private bool CreaEnfoque()
        {
            clsEnfoqueDeMercado_CD objEnfoque_CD = new clsEnfoqueDeMercado_CD();
            if(objEnfoque_CD.CreaNuevoEnfoque(this))
            {
                this.EsModificado = true;
                foreach (clsEnfoqueMercadoTerreno_CRN objEnfoqueMTerreno in this.ComparacionesEnfoqueMTerreno)
                {
                    objEnfoqueMTerreno.Guardar();
                }
                this.ComparacionesEnfoqueMTerreno = clsEnfoqueMercadoTerreno_CRN.RecuperaEnfoques(this);
                foreach (clsEnfoqueMercadoVenta_CRN objEnfoqueVenta in this.ComparacionesEnfoqueMVenta)
                {
                    objEnfoqueVenta.Guardar();
                }
                this.ComparacionesEnfoqueMVenta = clsEnfoqueMercadoVenta_CRN.RecuperaEnfoqueMVentas(this);
                foreach (clsEnfoqueMercadoRenta_CRN objEnfoqueRenta in this.ComparacionEnfoqueMRenta)
                {
                    objEnfoqueRenta.Guardar();
                }
                this.ComparacionEnfoqueMRenta = clsEnfoqueMercadoRenta_CRN.RecuperaEnfoquesDeMRenta(this);
                return true;
            }
            return false;
        }

        private bool ModificaEnfoque()
        {
            clsEnfoqueDeMercado_CD objEnfoque_CD = new clsEnfoqueDeMercado_CD();
            if (objEnfoque_CD.ActualizaEnfoque(this))
            {
                foreach (clsEnfoqueMercadoTerreno_CRN objEnfoqueMTerreno in this.ComparacionesEnfoqueMTerreno)
                {
                    objEnfoqueMTerreno.Guardar();
                }
                this.ComparacionesEnfoqueMTerreno = clsEnfoqueMercadoTerreno_CRN.RecuperaEnfoques(this);
                foreach (clsEnfoqueMercadoVenta_CRN objEnfoqueVenta in this.ComparacionesEnfoqueMVenta)
                {
                    objEnfoqueVenta.Guardar();
                }
                this.ComparacionesEnfoqueMVenta = clsEnfoqueMercadoVenta_CRN.RecuperaEnfoqueMVentas(this);
                foreach (clsEnfoqueMercadoRenta_CRN objEnfoqueRenta in this.ComparacionEnfoqueMRenta)
                {
                    objEnfoqueRenta.Guardar();
                }
                this.ComparacionEnfoqueMRenta = clsEnfoqueMercadoRenta_CRN.RecuperaEnfoquesDeMRenta(this);
                return true;
            }
            return false;
        }

        private bool EliminaEnfoque()
        {
            clsEnfoqueDeMercado_CD objEnfoque_CD = new clsEnfoqueDeMercado_CD();
            return objEnfoque_CD.CreaNuevoEnfoque(this);
        }

        public bool DatosValidos()
        {
            return true;
        }

        private double Redondear(double numero, double redondea)
        {
            double resultado = numero / redondea;
            resultado = Math.Round(resultado, 0, MidpointRounding.AwayFromZero);
            return resultado * redondea;
        }

        public static clsEnfoqueDeMercado_CRN RecuperaEnfoqueDeMercado(clsInmueble_CRN objInmueble)
        {
            clsEnfoqueDeMercado_CD objEnfoque_CD = new clsEnfoqueDeMercado_CD();
            dsEnfoqueDeMercado.EnfoqueMercadoRow enfoqueRecuperado = objEnfoque_CD.RecuperaEnfoqueDeMercado(objInmueble.Avaluo.IdAvaluo);
            clsEnfoqueDeMercado_CRN objEnfoqueDeMercado = new clsEnfoqueDeMercado_CRN(objInmueble);
            if (enfoqueRecuperado != null)
            {
                objEnfoqueDeMercado.EsModificado = true;
                objEnfoqueDeMercado.FactorDeAjuste = enfoqueRecuperado.FactorAjuste;
                objEnfoqueDeMercado.JustificacionFactor = enfoqueRecuperado.JustificacionFactor;
                objEnfoqueDeMercado.RedondeoRenta = enfoqueRecuperado.RedondeoRenta;
                objEnfoqueDeMercado.RedondeoTerreno = enfoqueRecuperado.RedondeoTerreno;
                objEnfoqueDeMercado.RedondeoVentas = enfoqueRecuperado.RedondeoVenta;
                objEnfoqueDeMercado.ComparacionesEnfoqueMTerreno = clsEnfoqueMercadoTerreno_CRN.RecuperaEnfoques(objEnfoqueDeMercado);
                objEnfoqueDeMercado.CreaComparacionesEnfoqueTerrenoPorDeFault();
                objEnfoqueDeMercado.ComparacionesEnfoqueMVenta = clsEnfoqueMercadoVenta_CRN.RecuperaEnfoqueMVentas(objEnfoqueDeMercado);
                objEnfoqueDeMercado.CreaComparacionesEnfoqueVentasPorDefault();
                objEnfoqueDeMercado.ComparacionEnfoqueMRenta = clsEnfoqueMercadoRenta_CRN.RecuperaEnfoquesDeMRenta(objEnfoqueDeMercado);
                objEnfoqueDeMercado.CreaComparacionesEnfoqueRentasPorDefault();
                objEnfoqueDeMercado.ValorSeleccionado = enfoqueRecuperado.ValorConcluido;
            }
            return objEnfoqueDeMercado;
        }

        public void CreaComparacionesEnfoqueTerrenoPorDeFault()
        {
            for (int contador = this.ComparacionesEnfoqueMTerreno.Count; contador < 6; contador++)
            {
                clsEnfoqueMercadoTerreno_CRN objEnfoque = new clsEnfoqueMercadoTerreno_CRN(this);
                objEnfoque.Etiqueta = "T" + (contador + 1).ToString();
                this.ComparacionesEnfoqueMTerreno.Add(objEnfoque);
            }
        }

        public void CreaComparacionesEnfoqueVentasPorDefault()
        {
            for (int contador = this.ComparacionesEnfoqueMVenta.Count; contador < 6; contador++)
            {
                clsEnfoqueMercadoVenta_CRN objEnfoque = new clsEnfoqueMercadoVenta_CRN(this);
                objEnfoque.Etiqueta = "V" + (contador + 1).ToString();
                this.ComparacionesEnfoqueMVenta.Add(objEnfoque);
            }
        }

        public void CreaComparacionesEnfoqueRentasPorDefault()
        {
            for (int contador = this.ComparacionEnfoqueMRenta.Count; contador < 6; contador++)
            {
                clsEnfoqueMercadoRenta_CRN objEnfoque = new clsEnfoqueMercadoRenta_CRN(this);
                objEnfoque.Etiqueta = "R" + (contador + 1).ToString();
                this.ComparacionEnfoqueMRenta.Add(objEnfoque);
            }
        }

        #endregion
    }
}
